package com.icbc.cc.api;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;

public class FileUtil {

	/**
	 * 
	 * TODO 方法的描述：。 
	 * <pre>
	 *	复制文件
	 * </pre>
	 * @param src 源文件路径
	 * @param tar 保存目标路径
	 * @param overlay 目标已存在是否覆盖
	 * @return
	 * @throws URISyntaxException 
	 */
	public boolean copyFile(String src,String tar,boolean overlay) throws URISyntaxException{
		File srcFile = new File(src);
		// 判断源文件是否存在  
        if (!srcFile.exists()) {  
        	System.out.println("源文件：" + src + "不存在！");
            return false;  
        } else if (!srcFile.isFile()) {  
        	System.out.println("复制文件失败，源文件：" + src + "不是一个文件！");
            return false;  
        }  
		File tarFile = new File(tar);
		if (tarFile.exists()) {  
            // 如果目标文件存在并允许覆盖  
            if (overlay) {  
                // 删除已经存在的目标文件，无论目标文件是目录还是单个文件  
            	new File(tar).delete();  
            }  
        } else {  
            // 如果目标文件所在目录不存在，则创建目录  
            if (!tarFile.getParentFile().exists()) {  
                // 目标文件所在目录不存在  
                if (!tarFile.getParentFile().mkdirs()) {  
                    // 复制文件失败：创建目标文件所在目录失败  
                    return false;  
                }  
            }  
        } 
		// 复制文件  
        int byteread = 0; // 读取的字节数  
        InputStream inSt = null;  
        OutputStream outSt = null; 
        try {  
        	inSt = new FileInputStream(srcFile);  
        	outSt = new FileOutputStream(tarFile);  
            byte[] buffer = new byte[1024];  
            while ((byteread = inSt.read(buffer)) != -1) {  
            	outSt.write(buffer, 0, byteread);  
            }  
            return true;  
        } catch (FileNotFoundException e) {  
            return false;  
        } catch (IOException e) {  
            return false;  
        } finally {  
            try {  
            	if (outSt != null){
                	outSt.close();
                }   
                if (inSt != null){
                	inSt.close();
                }   
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }
	}
	/**
	 * 
	 * TODO 方法的描述：。 
	 * <pre>
	 * 通过http保存远程文件至本地
	 * </pre>
	 * @param httpUrl 远程文件地址
	 * @param tar 本地保存地址
	 * @param overlay 本地文件存在时是否覆盖
	 * @return
	 */
	public boolean saveFileToLocale(String httpUrl,String tar,boolean overlay){
		InputStream inSt = null;  
        OutputStream outSt = null; 
        try {
            File tarFile = new File(tar);
    		if (tarFile.exists()) {  
                // 如果目标文件存在并允许覆盖  
                if (overlay) {  
                    // 删除已经存在的目标文件，无论目标文件是目录还是单个文件  
                	new File(tar).delete();  
                }  
            } else {  
                // 如果目标文件所在目录不存在，则创建目录  
                if (!tarFile.getParentFile().exists()) {  
                    // 目标文件所在目录不存在  
                    if (!tarFile.getParentFile().mkdirs()) {  
                        // 复制文件失败：创建目标文件所在目录失败  
                        return false;  
                    }  
                }  
            } 
    		URL url = new URL(httpUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            inSt = connection.getInputStream();
    		outSt = new FileOutputStream(tarFile);
    		// 复制文件  
            int byteread = 0; // 读取的字节数  
            byte[] buffer = new byte[1024];  
            while ((byteread = inSt.read(buffer)) != -1) {  
            	outSt.write(buffer, 0, byteread);  
            }  
            return true; 
        } catch (Exception e) {
            return false;
        } finally {  
            try {  
                if (outSt != null){
                	outSt.close();
                }   
                if (inSt != null){
                	inSt.close();
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }
	}
	/**
	 * TODO 方法的描述：。 
	 * <pre>
	 *
	 * </pre>
	 * @param args
	 * @throws URISyntaxException 
	 */
	public static void main(String[] args) throws URISyntaxException {
		// TODO Auto-generated method stub
		new FileUtil().saveFileToLocale("http://172.16.6.230:9080/prodmgmt/uploadfiles/2016/08/24/1472022017175gkfmaoj.xlsx", "D:/a.xlsx", true);
	}

}
